package ar.edu.unrn.lia.bean.datamodel;

import java.util.ArrayList;
import java.util.List;
import java.util.Map;

import javax.inject.Inject;

import org.primefaces.model.LazyDataModel;
import org.primefaces.model.SortOrder;

import ar.edu.unrn.lia.bean.filter.PropiedadFiltro;
import ar.edu.unrn.lia.model.Movimiento;
import ar.edu.unrn.lia.model.Propiedad;
import ar.edu.unrn.lia.service.PropiedadService;


public class LazyPropiedadDataModel extends LazyDataModel<Propiedad> {

	private static final long serialVersionUID = 1L;
	
	private static final String ORDER_DEFAULT = "id";

	private List<Propiedad> list;
	
	private PropiedadFiltro filtros;
	
	
	@Inject
	PropiedadService entityService;
	
	
	public PropiedadService getEntityService() {
		return entityService;
	}

	
	
	public LazyPropiedadDataModel() {
		super();
		// TODO Auto-generated constructor stub
	}

	public LazyPropiedadDataModel(PropiedadService entityService) {
		super();
		this.entityService = entityService;
	}

	@Override
	public List<Propiedad> load(int startingAt, int maxPerPage, String sortField,
			SortOrder sortOrder, Map<String, String> filters) {
		try {
			try {
				// Filtros Avanzados
				filters = getFiltros().agregarFiltros(filters);
				list = getEntityService().getList(startingAt, maxPerPage,filters, (sortField==null?ORDER_DEFAULT:sortField), (sortOrder.name().equals(SortOrder.ASCENDING.toString())));

			} finally {

			}
		} catch (Exception e) {
			e.printStackTrace();
			list = new ArrayList<Propiedad>(0);
		}

		// set the total of list
		if (getRowCount() <= 0) {
			setRowCount(getEntityService().getCount(filters).intValue());
		}

		// set the page dize
		setPageSize(maxPerPage);

		return list;
	}

	@Override
	public Object getRowKey(Propiedad entity) {
		return entity.getId();
	}

	@Override
	public Propiedad getRowData(String entityId) {
		Integer id = Integer.valueOf(entityId);

		for (Propiedad entity : list) {
			if (id.equals(entity.getId())) {
				return entity;
			}
		}

		return null;
	}

	public PropiedadFiltro getFiltros() {
		return filtros;
	}

	public void setFiltros(PropiedadFiltro filtros) {
		this.filtros = filtros;
	}
	
	
}